const express = require('express')
const path = require('path')

const app = express()

app.use(express.urlencoded())
app.use(express.json())

app.use((request,response,next)=>{
    let address = ['http://127.0.0.1:5500', 'http://127.0.0.1:5540', 'http://127.0.0.1:5560', 'http://127.0.0.1:5600']
    if (address.includes(request.headers.origin)) {
        // 允许跨域
        response.set('Access-Control-Allow-Origin', request.headers.origin)  //第二个参数为请求的来源地址（协议 域名 端口号）
        
        // 允许跨域所发送的请求头  第二个参数为请求头
        response.set('Access-Control-Allow-Headers','token')
    }
    next()
})

// 查询信息的路由
app.get('/getmsg', (request, response) => {
    console.log('接收到消息了');
    console.log(request.query, 'params')
    const token = request.headers.token
    if (!token) {
        return response.send({
            code: 10002,
            msg: '没有权限',
            data: null
        })
    }

    const { userId } = request.query
    if (userId !== '001') {
        return response.send({
            code: 10001,
            msg: '查询失败',
            data: null
        })
    }

    response.send({
        code: 10000,
        msg: '查询成功',
        data: {
            name: '赵楠',
            age: 34,
            sex: '男'
        }
    })
})

// 添加信息的路由
app.post('/addmsg', (request, response) => {
    console.log(request.body);
    const { name, sex, age } = request.body
    response.send({
        code: 10000,
        msg: '添加信息成功',
        data: request.body
    })
})

// 修改信息的路由
app.put('/updatamsg', (request, response) => {
    console.log(request.body);
    const { name, sex, age } = request.body
    response.send({
        code: 10000,
        msg: '修改信息成功',
        data: request.body
    })
})

// 删除信息的路由
app.delete('/deletemsg', (request, response) => {
    const { userId } = request.query

    response.send({
        code: 10000,
        msg: '删除成功',
        data: null
    })
})

// jsonp解决跨域的路由
// app.get('/user', (request, response) => {
//     // console.log('接收到请求');
//     const { userId, cb } = request.query
//     if (userId !== '001') {
//         const data = {
//             code: 10001,
//             msg: '查询失败',
//             data: null
//         }

//         return response.send(`${cb}(${JSON.stringify(data)})`)
//     }


//     data = {
//         code: 10000,
//         msg: '查询成功',
//         data: {
//             name: '赵楠',
//             age: 34,
//             sex: '男'
//         }
//     }
//     console.log(`${cb}(${JSON.stringify(data)})`);  //  `${cb}(${data})`  `callback(data)` data是个对象 转化成字符串类型时 变成了[obj,obj]
//     response.send(`${cb}(${JSON.stringify(data)})`)

// })

app.get('/user', (request, response) => {
    console.log(request.query);
    const { userId, cb } = request.query
    if (userId !== '001') {
        const data = {
            code: 10001,
            msg: '查询错误',
            data: null
        }
        return response.send(`${cb}(${JSON.stringify(data)})`)
    }


    const data = {
        code: 10000,
        msg: '查询成功',
        data: {
            name: '王军',
            age: 39,
            sex: '男'
        }
    }
    response.send(`${cb}(${JSON.stringify(data)})`)
})

// 取消请求
app.get('/getlast', (request, response) => {
    const { userId } = request.query
    console.log("收到请求");
    setTimeout(function () {

        if (userId !== '001') {
            return response.send({
                code: 10001,
                msg: '查询失败',
                data: null
            })
        }

        response.send({
            code: 10000,
            msg: '查询成功',
            data: {
                name: '赵楠',
                age: 34,
                sex: '男'
            }
        })
    }, 4000)
})

// cors解决跨域问题 

// 此时为get请求 所以即使设置了允许跨域所发送的请求头 但是预检请求看不到 所以请求不会通过
// 为了解决这一问题 可以设置一个中间件 
app.get('/userInfo', (request, response) => {
    const { userId } = request.query
    // 允许ajax跨域请求
    // 允许多个地址访问 但是不能直接把别的地址写在后面
    // 可以把这些地址统一放入一个数组中
    // 再进行判断 如果请求地址符合数组中的某个地址 则成功请求 如果不符合 则请求失败
    // let address = ['http://127.0.0.1:5500', 'http://127.0.0.1:5540', 'http://127.0.0.1:5560', 'http://127.0.0.1:5600']
    // if (address.includes(request.headers.origin)) {
    //     // 允许跨域
    //     response.set('Access-Control-Allow-Origin', request.headers.origin)  //第二个参数为请求的来源地址（协议 域名 端口号）
        
    //     // 允许跨域所发送的请求头  第二个参数为请求头
    //     response.set('Access-Control-Allow-Headers','token')
    // }

    // .includes是判断 数组中是否有某个数的数组方法，参数为你想判断的值 当数组中有该数值时 会返回true 反之会返回false

    response.send({
        code: 10000,
        msg: '查询成功',
        data: {
            name: '赵楠',
            age: 34,
            sex: '男'
        }
    })
})

// 静态页面的路由
app.get('/1', (request, response) => {
    const Filepath = path.resolve(__dirname, './01.axios基础.html')
    response.sendFile(Filepath)
})

app.get('/2', (request, response) => {
    const Filepath = path.resolve(__dirname, './02.axios的请求别名.html')
    response.sendFile(Filepath)
})

app.get('/3', (request, response) => {
    const Filepath = path.resolve(__dirname, './03.axios的请求拦截器.html')
    response.sendFile(Filepath)
})

app.get('/4', (request, response) => {
    const Filepath = path.resolve(__dirname, './04.axios的响应拦截器.html')
    response.sendFile(Filepath)
})

app.get('/5', (request, response) => {
    const Filepath = path.resolve(__dirname, './拦截器的练习.html')
    response.sendFile(Filepath)
})

app.get('/6', (request, response) => {
    const Filepath = path.resolve(__dirname, './取消请求.html')
    response.sendFile(Filepath)
})


app.listen(4545, () => {
    console.log('启动成功 请跳转到 http://127.0.0.1:4545');
})